package com.allwees.bs.module.mms.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.allwees.bs.core.modelbase.entity.WfBaseEntity;
import com.allwees.bs.module.core.wf.WorkflowAware;
import com.allwees.core.common.constant.EPlatform;
import com.allwees.core.common.constant.EStatus;
import com.allwees.core.common.util.reflect.PojoUtil;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.persistence.Column;
import java.math.BigDecimal;

@Data
@EqualsAndHashCode(callSuper = true)
@TableName("mms_supplier_apply")
public class SupplierApply extends WfBaseEntity implements WorkflowAware {

    private static final long serialVersionUID = 8207104425480969347L;
    /**
     * 平台
     **/
    private EPlatform platform;

    // ======== 公司信息=============
    /**
     * 公司名称
     **/
    private String companyName;

    /**
     * 公司网址
     **/
    private String companyWebsite;

    /**
     * 公司国家 code
     **/
    private String companyCountryId;

    /**
     * 公司省 code
     **/
    private String companyProvinceId;

    /**
     * 公司城市 code
     **/
    private String companyCityId;

    /**
     * 公司地址
     **/
    private String companyAddress;

    /**
     * 公司国家 code
     **/
    private String shipCountryId;

    /**
     * 发货省 code
     **/
    private String shipProvinceId;

    /**
     * 发货城市 code
     **/
    private String shipCityId;

    /**
     * 发货地址
     **/
    private String shipAddress;

    /**
     * 公司性质
     **/
    private String companyNature;

    /**
     * 公司员工数
     **/
    private String workers;

    /**
     * 公司注册资金
     **/
    private BigDecimal companyRegisterCapital;

    // ======== 经营信息=============

    /**
     * 经营业务
     **/
    private String engageCategory;

    /**
     * 最近一年销售额
     **/
    private BigDecimal lastYearSalesAmt;

    /**
     * 电商销售占比
     **/
    private String electronicCommerceSalesRate;

    /**
     * 合作过的电商平台
     **/
    private String cooperatedElectronicCommercePlatforms;

    /**
     * 合作过的品牌
     **/
    private String cooperatedBrand;

    /**
     * 销售区域
     **/
    private String salesArea;

    /**
     * 正在合作的电商平台
     **/
    @Column(columnDefinition = "text")
    private String cooperatingElectronicCommercePlatform;

    // ======== 资质材料=============

    /**
     * 是否自主注册品牌
     **/
    private Boolean registerOwnBrand;

    /**
     * 自主注册品牌名称
     **/
    private String registerOwnBrandName;

    /**
     * 全年产品款式开发数量
     **/
    private Integer productDevelopNumOnYear;

    /**
     * 供应商的商品是否自主研发
     **/
    private Boolean autonomyDevelopProduct;

    /**
     * 是否提供商品图片
     **/
    private Boolean provideProductImg;

    /**
     * 具有美金账户
     **/
    private Boolean usdAccount;

    /**
     * 是否有产品品牌授权书
     **/
    private Boolean productBrandWarrant;

    /**
     * 是否有产品相关认证
     **/
    private Boolean productWarrant;

    /**
     * 是否有公司三证
     **/
    private Boolean companyCard;

    /**
     * 公司三证 url
     **/
    private String companyCardUrl;

    /**
     * 品牌注册证书
     **/
    private Boolean brandRegisterCard;

    /**
     * 品牌注册证书 url
     **/
    private String brandRegisterCardUrl;

    /**
     * 能否开具增值税发票
     **/
    private Boolean canIssueVatBill;

    /**
     * 能否提供原产地证
     **/
    private Boolean provideOriginCard;

    //=============联系方式 to super ===============

    /**
     * 人员名称
     **/
    @Column(length = 48)
    private String username;

    /**
     * 手机号
     **/
    @Column(length = 16)
    protected String phone;

    /**
     * 邮箱
     **/
    @Column(length = 48)
    private String email;

    /**
     * qq
     **/
    private String qq;

    /**
     * wechat
     **/
    private String wechat;

    /**
     * 初审人
     **/
    private String firstAuditUserUuid;

    /**
     * 终审人
     **/
    private String finalAuditUserUuid;

    public Supplier toSupplier() {
        Supplier supplier = PojoUtil.copy(new Supplier(), this);
        return supplier;
    }

    @JsonIgnore
    public boolean disabled() {
        return EStatus.DISABLED.getValue().equals(getStatus());
    }

    @JsonIgnore
    public boolean inAudit() {
        return EStatus.MMS_FIRST_AUDIT_APPROVED.getValue().equals(getStatus())
                || EStatus.WAIT_AUDIT.getValue().equals(getStatus());
    }

    @JsonIgnore
    public boolean rejected() {
        return EStatus.MMS_FINAL_AUDIT_REJECTED.getValue().equals(getStatus())
                || EStatus.MMS_FIRST_AUDIT_REJECTED.getValue().equals(getStatus());
    }

    @JsonIgnore
    public boolean approved() {
        return EStatus.NORMAL.getValue().equals(getStatus());
    }
}
